package ca.etsmtl.log120.tp1.system;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/******************************************************
Cours : LOG120
Session : E2011
Groupe : 01
Projet : Laboratoire #1
Etudiants : Nicolas Blais Miko
 	 		Yohan Trepanier-Montpetit
Codes perm. : BLAN24079109
			  TREY
Professeur : Chamseddine Talhi
Charge de labo : Eric Goulet
Nom du fichier : Decoder.java
Date cree : 2011-05-23
Date dern. modif. 2015-05-18
 *************************************************** ****
Historique des modifications
 *************************************************** ****
2011-05-23 Version initiale (Yohan Trepanier)
 ***************************************************/

/**
 * Classe permettant de decoder un message provenant du serveur
 */
public class Decoder {

	private String type;		//Le type de forme
	private int[] properties = new int[5];	//Ses proprietes

	/**
	 * Constructeur
	 */
	public Decoder(){}

	/**
	 * Constructeur
	 * @param string La string a decoder
	 */
	public Decoder(String string){
		decode(string);
	}

	/**
	 * Decodeur de string
	 * @param string La string a decoder
	 */
	public void decode(String string){

		//		System.out.println("Decoder: decoding!");

		// La syntaxe d'une expression rationnelle est complexe et puissante :
		// http://www.commentcamarche.net/php/phpreg.php3
		// <(.*)> signifie un ensemble de caractères se trouvant entre un < et un >
		// </\\1> signifie l'équivalent du premier argument, entre </ et > 

		String newString = string.replace('\n', ' ');
		
		Pattern patternA = Pattern.compile("([0-9]*) <(\\w*)>(.*) </\\2> ");
		Matcher matcherA = patternA.matcher(newString);
		
		@SuppressWarnings("unused")
		boolean isMatched = matcherA.matches();
		
		properties[0] = Integer.parseInt(matcherA.group(1));
		type = matcherA.group(2);
		
		String[] details = matcherA.group(3).split(" ");
		for(int i =1; i< details.length; i++){
			properties[i] = Integer.parseInt(details[i]);
		}
	}


	/**
	 * Permet de demander les proprietes de la forme decodee
	 * @return Les proprietes
	 */
	public int[] getProperties(){

		return properties;
	}

	/**
	 * Permet de savoir le type de forme
	 * @return Le type de forme
	 */
	public String getType(){
		return type;
	}

}
